﻿/**
 \file common.h
 Тут описаны различные общие константы и тексты ошибок.
*/
#include <stdio.h>
#include <stdlib.h>

/** 
 \def MaxInt
 Максимальное значение целого числа.
*/
#define MaxInt 0xFFFFFFFF

/**
 \def MAX_IDENT
 Размер массива для идентификаторов.
*/
#define MAX_IDENT 256

/**
 \def LENGTH_IDENT
 Длина идентификатора минус нулевой символ,
 плюс учтем, что массив начинается с нуля.
*/
#define LENGTH_IDENT MAX_IDENT - 2

/**
 \def ETEMPLATE
 Шаблон для вывода ошибок.
*/
#define ETEMPLATE "Ошибка (строка %d): %s"

/* Определения ошибок */
#define eOpenArrayIsNotUsual \
 "Открытый массив не может быть объявлен с ключевыми словами CONST и VAR!\n"
#define eNotFindOf \
 "Не найдено ключевое слово OF!\n"
#define eProcTypeCantBeWithVarOrConst \
 "Процедурные типы не могут быть вместе с CONST и VAR!\n"
#define eParamCantBeRecordOrArray \
 "Структуры и массивы нельзя передавать по значению!\n"
#define eArrayOrRecordReturn \
 "Структуры и массивы не могут быть возвращаемыми типами!\n"
#define eTypeMustBeRecord \
 "Существуют только указатели на структуры!\n"
#define eNotFindToKeyword \
 "Не найдено ключевое слово TO!\n"
#define eSimpleTypeCantBeBasis \
 "Базовый тип не может быть основой пользовательского типа!\n"
#define eNotFindEqual \
 "Не найдено '='!\n"
#define eThereAreNotTypes \
 "Ни один тип не определен в секции TYPE!\n"
#define eFieldCantRefsToYourStruct \
 "Поле не может ссылаться на свою структуру!\n"
#define eNotFindRightType1 \
 "Не найдена ')'!\n"
#define eParentMustbeRecord \
 "Наследуемый тип данных должен быть только структурой!\n"
#define eNotFindInheritedType \
 "Не указан наследуемый тип данных!\n"
#define eNoFindIdentAfterComma \
 "Не указан идентификатор после запятой!\n"
#define eNotFindType \
 "Тип не найден!\n"
#define eNotFindDoubleDot \
 "Не найдено двоеточие!\n"
#define eNotFindVars \
 "В разделе VAR не объявлено ни одной переменной!\n"
#define eUnknownKeyword \
 "Неизвестное ключевое слово!\n"
#define eNotFindDot \
 "Не найдена точка!\n"
#define eNotFindEnd \
 "Не найдено ключевое слово END!\n"
#define eNotFindDotComma \
 "Не найдена точка с запятой!\n"
#define eNotFindKeywordModule \
 "Не найдено ключевое слово MODULE!\n"
#define eNotFindNameOfModule \
 "Не указано имя модуля!\n"
#define eNoAlphaSymbol \
 "Символ не принадлежит алфавиту языка!\n"
#define eNotFindEndOfComment \
 "Не найден конец комментария!\n"
#define eTooLongIdent \
 "Идентификатор больше 255 символов!\n"
#define eNotFindEndOfString \
 "Не найдена завершающая кавычка строки!\n"
#define eIntOutOfRange \
 "Число выходит за границы диапазона!\n"
#define eCharOutOfRange \
 "Код символьной константы не может быть больше 255!\n"
#define DOrELetterUsedWrong \
 "Буква D используется в дробном числе двойной точности, E - в числе с одинарной точностью!\n"
#define eHexInDec \
 "В десятичном числе нельзя использовать шестнадцатеричные цифры!\n"
#define eNotFindDotInNumber \
 "В числе не найдена точка!\n"
#define eNotFindNumberAfterDot \
 "В дробном числе, после точки, должна быть хотя бы одна цифра!\n"
#define eNotFindNumberInDegree \
 "Степень числа записана неправильно!\n"
#define eIdentDeclared(name) \
 "Идентификатор \"name\" уже определен!\n"

void *GetMem(unsigned long int size, const char *func);